package com.moyz.adi.common.dto;

import com.moyz.adi.common.annotation.AskReqCheck;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import java.util.List;

/**
 * AskReq 类用于封装对话请求的数据。
 * 该类定义了向服务发送对话或提问请求时所需的各种参数。
 */
@Schema(description = "对话的请求对象")
@Data // 自动生成getter、setter、toString、equals和hashCode方法
@AskReqCheck // 自定义验证注解，可能包含额外的业务逻辑验证
public class AskReq {

    /**
     * 对话的唯一标识符（UUID），长度必须为32个字符。
     * 用于关联特定的对话上下文。
     */
    @Length(min = 32, max = 32, message = "conversationUuid 必须是32个字符长")
    private String conversationUuid;

    /**
     * 父消息ID，用于构建消息树结构。
     * 可以为空，如果为空则表示这是一个新的对话起点。
     */
    private String parentMessageId;

    /**
     * 用户输入的提示文本。
     * 如果 regenerateQuestionUuid 不为空，则此字段将被忽略。
     */
    private String prompt;

    /**
     * 图片地址列表，多模态语言模型（LLM）使用。
     * 目前只支持本地图片的UUID。
     */
    private List<String> imageUrls;

    /**
     * 如果不为空，表示将使用已存在的问题重新生成回答。
     * 在这种情况下，prompt 字段将被忽略，系统会根据提供的 UUID 获取原始问题的提示。
     */
    private String regenerateQuestionUuid;

    /**
     * 要使用的AI模型名称。
     * 指定哪个具体的AI模型来处理此次请求。
     */
    private String modelName;
}
